package utils

import (
	"fmt"
	"net/http"
)

type httpHeader struct{}

func (httpHeader) SetCsvHeader(w http.ResponseWriter, fileName string) {
	w.Header().Set("Content-Type", "text/csv")
	w.Header().Set("Content-Disposition", fmt.Sprintf("attachment; filename=%s", fileName))
	w.WriteHeader(200)
}

func (httpHeader) SetExcelHeader(w http.ResponseWriter, fileName string) {
	w.Header().Set("Content-Type", "application/vnd.ms-excel")
	w.Header().Set("Content-Disposition", fmt.Sprintf("attachment; filename=%s", fileName))
	w.WriteHeader(200)
}

func (httpHeader) SetPdfHeader(w http.ResponseWriter, fileName string) {
	w.Header().Set("Content-Type", "application/pdf")
	w.Header().Set("Content-Disposition", fmt.Sprintf("attachment; filename=%s", fileName))
	w.WriteHeader(200)
}

func newHtppHeader() *httpHeader {
	return &httpHeader{}
}

// func upload(w http.ResponseWriter, req *http.Request) {
// 	var contentType string
// 	var contentLen int64
// 	contentType = req.Header.Get("content-type")
// 	contentLen = req.ContentLength
// 	if !strings.Contains(contentType, "multipart/form-data") {
// 		w.Write([]byte("content-type must be multipart/form-data"))
// 		return
// 	}
// 	if contentLen >= 4*1024*1024 {
// 		w.Write([]byte("file to large, limit 4MB"))
// 		return
// 	}

// 	err := req.ParseMultipartForm(4 * 1024 * 1024)
// 	if err != nil {
// 		w.Write([]byte("ParseMultipartForm error:" + err.Error()))
// 		return
// 	}

// 	if len(req.MultipartForm.File) == 0 {
// 		w.Write([]byte("not have any file"))
// 		return
// 	}

// 	for name, files := range req.MultipartForm.File {
// 		if len(files) != 1 {
// 			w.Write([]byte("too many files"))
// 			return
// 		}

// 		if name == "" {
// 			w.Write([]byte("is not FileDate"))
// 			return
// 		}

// 		for _, f := range files {
// 			handler, err := f.Open()
// 			if err != nil {
// 				w.Write([]byte(fmt.Sprintf("unknown error, filename=%s, fileSize=%d, err:%s", f.Filename, f.Size, err.Error())))
// 				return
// 			}

// 			path := "./" + f.Filename
// 			dst, _ := os.Create(path)
// 			io.Copy(dst, handler)
// 			dst.Close()
// 			w.Write([]byte("successful, url=" + url.QueryEscape(f.Filename)))
// 		}
// 	}
// }

// func getContentType(fileName string) (extension, contentType string) {
// 	arr := strings.Split(fileName, ".")

// 	if len(arr) >= 2 {
// 		extension = arr[len(arr)-1]
// 		switch extension {
// 		case "jpeg", "jpe", "jpg":
// 			contentType = "image/jpeg"
// 		case "png":
// 			contentType = "image/png"
// 		case "gif":
// 			contentType = "image/gif"
// 		case "mp4":
// 			contentType = "video/mp4"
// 		case "mp3":
// 			contentType = "audio/mp3"
// 		case "wav":
// 			contentType = "audio/wav"
// 		case "pdf":
// 			contentType = "application/pdf"
// 		case "doc", "":
// 			contentType = "application/msword"
// 		}
// 	}
// 	contentType = "applicaion/octet-stream"
// 	return
// }

// func download(w http.ResponseWriter, req *http.Request) {
// 	if req.RequestURI == "/favicon.ico" {
// 		return
// 	}

// 	fileName := req.RequestURI[1:]
// 	enEscapeUrl, err := url.QueryUnescape(fileName)
// 	if err != nil {
// 		w.Write([]byte(err.Error()))
// 		return
// 	}

// 	f, err := os.Open("./" + enEscapeUrl)
// 	if err != nil {
// 		w.Write([]byte(err.Error()))
// 		return
// 	}

// 	info, err := f.Stat()
// 	if err != nil {
// 		w.Write([]byte(err.Error()))
// 		return
// 	}

// 	_, contentType := getContentType(fileName)
// 	w.Header().Set("Content-Disposition", "attachment; filename="+fileName)
// 	w.Header().Set("Content-Type", contentType)
// 	w.Header().Set("Content-Length", strconv.FormatInt(info.Size(), 10))

// 	f.Seek(0, 0)
// 	io.Copy(w, f)
// }

// func DownloadTest() {
// 	http.HandleFunc("/file/upload", upload)
// 	http.HandleFunc("/", download)
// 	http.ListenAndServe(":8080", nil)
// }
